技術的負債への向き合い PHP編|10年越えプロダクトを提供する3社が語ります!
https://gyazo.com/0ff0e4a5a5a899c8d4dee41990737d57
技術的負債への向き合い PHP編|10年越えプロダクトを提供する3社が語ります! - connpass
現場のいちメンバーの視点からの技術的負債の向き合い方
株式会社コドモン
プロダクト開発部 エンジニア 福井将之
日々取り組んでいる対応
require_onceの見直し
PHPUnitの古い機能を書き換えたい
スーパーグローバルの依存を減らす
自動テストを書く
クラスベースになっていないのをクラス構文に切り出す
依存しているライブラリをアップグレードする
厳密な型付け
可変変数の除去
現場で向き合うための手持ちの道具
自分のプロダクトとして振る舞う
学びを得られる感謝と驚き
技術的負債は動くことで価値を産み続けているもの
感謝と尊敬をもつ
何もしないならただ乗り
自分のものにするために見る
自分の記憶にどう定着させるか
批判的に見る
ラフに見る
丁寧に見る(深掘り)
図にまとめる
障害対応の発生から完了までを経験
アラートは全て見てみる
自分から手を挙げる
理解のための徳等席
集中モード
ポストモーテム
問い合わせ対応を率先して対応する
障害対応と似ている
向き合うモチベーションはどこにある?
仕事として
新しい視野を得られる
自分のため、人のため
リアーキテクチャの現場で向き合う
BASE株式会社
BASE Department Product Division EPM 宮村 幸宏
2012 創業
2020 リアーキテクチャプロジェクトの開始
モノリスをモジュラーモノリスにするコードベースの書き換え
注文管理モジュールに切り出す
ストラングラーパターン
BASE大規模リアーキテクチャリング / base_rearchitecturing - Speaker Deck
モジュラーモノリスでスケーラブルなシステムを作る - BASE のリアーキテクチャのいま - Speaker Deck
どのように設計を進めるか
現状のコードの理解
難しい
地道にやっていく
社内のナレッジベースをみる
先入観を捨ててコードの違和感に向き合う
未知の謎を見つけたら祝う
理想のコード検討
DDDプラクティスの実践
ドメインモデリング
業務整理
集約の定義
ルールや負荷情報の書き出し
ライフサイクル
ワークフローの分解でオブジェクト群に操作
イベントストーミング
あらゆる知識を吸収する
使用
運用
業務
境界づけられたコンテキスト
現実的に書くべきコードの判断
モジュールの境界をどう定めるのか
トランザクションの範囲をどこまで変えられるか
一部を非同期化するなど
元のコードを消すためには完全理解しておく必要がある
寿命が長くあるためにそこそこ理想的に書かないと意味がない
株式会社kubell
プロダクト開発ユニット SREグループ 山下 祐
アカウント設定画面の刷新
既存の開発資産を最大限に再利用していく
既存システムの構造と課題
独自フレームワーク
Smartyを活用したもの
ミドルウェアの仕組みがない
機能依存のクラスが存在するライブラリ
フロントエンドはNext.jsを採用
Web APIが必要
モダンフレームワークに近い体験を求める
技術的制約と解決アプローチ
フレームワークを完全に乗り換える選択はできない
拡張していく
軽量ルーティングライブラリを載せていく
GitHub - thephpleague/route: Fast PSR-7 based routing and dispatch component including PSR-15 middleware, built on top of FastRoute.
リファクタリングを後回しにする戦略
ヘキサゴナルアーキテクチャの採用
ポート&アダプター
入口と出口を用意する
外側は既存ライブラリへの依存
内側は依存しない形で自由な実装ができるようになった
HTTPリクエストをエミュレートするテスト基盤の整備
Laravelのfeature testを模倣する
クロストーク
古いPHPのバージョン
kubell
8.0
BASE
7.0, 8.0系
コドモン
8.1系
リアーキテクチャのプロジェクトはどれくらい長いのか大きくなるのか
kubell
担当したところは小さかった
大きいモノレポなのでリポジトリを分けるなどしていくなどしていく
BASE
順番に新しくなったものを切り替えていく
コドモン
APIベースで切り替えている
技術的負債を残しにくい開発は何をすべきか
コドモン
ユニットテストを書く
BASE
負債を借りるのが早いので嫌になったら返すプロセスをつくる
kubell
自動テスト
CI/CDを整備していく
技術的負債のリアーキテクチャはどう進めていった?
コドモン
許可は求めたことはない
気づいたタイミングでやっている
負債を入れ込んだ見積もりをしている
BASE
リアーキテクチャPJをやる前は成果を見せていったのがきっかけ
技術検証など
kubell
ボトムアップ
PdMへ説明する
しっかりと必要性を伝えて一緒に考える
ROIはどう測る?
kubell
変わったCI/CDの時間は説明として出しやすい
コドモン
正面からは戦わない
小さく初めて小さく失敗するを繰り返す
言語やフレームワークのアップデート時期はどこで行うか
BASE
基盤チームが主で行っている
テストが通ると基本OKの状態で運用
kubell
EOLの間近のとき
コドモン
各チーム持ち回りでやる
ストリームアラインドチーム
生成AIは活用しているか?
kubell
GitHub Copilotを活用していく
コードリーディングで使う
BASE
GitHub Copilot
NotebookLM
ChatGPT Team
コドモン
Cline、GitHub Copilot
レビュー機能
リアーキテクチャの楽しさ・やりがい
kubell
ぼくのかんがえたさいきょうのせっけいができると嬉しい
BASE
機能を極力変えず、質を落とさない
技術的なところに専念できるところが楽しい
コドモン
撤退戦のときに動き続けるシステムを運用するのが好き
CI/CDは今どれくらいかかっているのか
kubell
CIは5分前後
並列テストでそれくらいになるように
デプロイは10分程度
k8s
BASE
新しい環境
CIは10分かからない程度
CDは30分くらい
古い環境
CIは10分ちょい
CDは1時間くらい(確認含めて)
コドモン
CIは7~8分
デプロイは10分
技術的負債への向き合い方から明日からあなたにもできる!工夫を1つ教えてください
kubell
静的解析ツール
Xdebug
コドモン
チェッカーを作れるといい
プロダクトに影響ないもの
BASE
これまで動いてきたものに敬意を払う
それに対して思いを馳せる
2025-05-08